<?php 
if (!isset($_SESSION)) {
  session_start();
}
define("CCTRL", "package");
define("CCTRLNAME", "package");
define("TOKEN", "e7297ffc33adc115dfbf2a37cd284d16");
include APPPATH . 'libraries/defu.php';
class package extends CI_Controller  {

        /**
        * Index Page for this controller.
        *
        * Maps to the following URL
        * 		http://example.com/index.php/welcome
        *	- or -  
        * 		http://example.com/index.php/welcome/index
        *	- or -
        * Since this controller is set as the default controller in 
        * config/routes.php, it's displayed at http://example.com/
        *
        * So any other public methods not prefixed with an underscore will
        * map to /index.php/welcome/<method_name>
        * @see http://codeigniter.com/user_guide/general/urls.html
        */
       protected $configs;
       function __construct()
        {
            parent::__construct();
            $this->load->helper('url');
            $this->load->model('backend/package_model');
            $this->package_model=new package_model();
            $this->load->model('backend/backend_model');
            $this->backend_model=new backend_model(array(
                "_table"    =>"dtb_product",
                "_id"       =>"ID",
                "_status"   =>"Status",
                "_insert"   =>"Insert",
                "_delete"   =>"Delete",
                "_update"   =>"Update",
            ));
            $this->load->model('colmod/package_colmod');
            $this->colModel=new package_colmod();
            $this->load->library('smarty3');
            $this->smarty=new CI_Smarty3();
            $this->smarty->error_reporting = E_ALL & ~E_NOTICE;
            if(!isset($_SESSION["ADP"][CCTRL]["display"]))$_SESSION["ADP"][CCTRL]["display"]=0;
        }
        function index(){
            if(!isset($_SESSION["ADP"]["USER"])){
                $this->smarty->display("backend/00_login"); 
                return;
            }
            if(!checkAuthority(CCTRLNAME)){
                $this->smarty
                        ->assign('_SESSION', $_SESSION)
                        ->display("backend/00_accessdenied");
                return;
            }
            $this->smarty
                    ->assign('_SESSION', $_SESSION)
                    ->display("backend/".CCTRL."/".CCTRL);
        }
        function gridscript(){
            //unset($_SESSION["ADP"][CCTRL."-JQX"]);
            if(isset($_SESSION["ADP"][CCTRL."-JQX"]["colModel"]))
                $colModel=$_SESSION["ADP"][CCTRL."-JQX"]["colModel"];
            else{
                $colModel=$this->colModel->get();
                $_SESSION["ADP"][CCTRL."-JQX"]["colModel"]=$colModel;
            }
            header("Content-type:text/javascript");
            $this->smarty
                    ->assign("colModel", $colModel)
                    ->assign("display",$_SESSION["ADP"][CCTRL]["display"])
                    ->display("backend/00_base/grid_advanced");
        }
        function handleEvent(){
            header("Content-type:text/javascript");
            $this->smarty->display("backend/".CCTRL."/handleEvent");
        }
        function edit($_id=""){
            $Data=null;
            if($_id!=""){
                $tmp=$this->package_model->get($_id);
                if(count($tmp)>0){
                    $Data["OBJ"]=$tmp[0];
                    $detail=json_decode($Data["OBJ"]->Detail,true);
                    $lst=array();
                    $tmp=array();
                    foreach ($detail as $pr){
                        $lst[]=$pr[0];
                        $tmp[$pr[0]]=$pr[1];
                    }
                    $Data["OBJ"]->Detail=$tmp;
                    $Data["tmp"]=$tmp;
                    $this->load->model("backend/product_model");
                    $this->product_model=new product_model();
                    $products=$this->product_model->getIn($lst);
                    if(count($products)>0){
                        $Data["Products"]=$products;
                    }
                }
            }
            //$this->load->model("backend/type_model");
            //$this->type_model=new type_model();
            //$Data["ocompany"]=$this->type_model->getByType("company");
            $this->smarty
                    ->assign('_SESSION', $_SESSION)
                    ->assign("Data", $Data)
                    ->display("backend/".CCTRL."/02_edit");
        }
        function save(){
            $_id    =$this->input->post("_id");
            $_name  =$this->input->post("_name");
            $_alias =$this->input->post("_alias");
            $_unitprice     =$this->input->post("_unitprice");
            $_description   =$_REQUEST["_description"];//$this->input->post("_description");
            $_products      =$this->input->post("_products");
            $messages=array();
            if($_name===false || $_name == ""){
                $messages[]    =   "[Shound be non-empty] Name không được để trống.";
            }
            if($_alias===false || convertUrl($_alias) == ""){
                $messages[]    =   "[Shound be non-empty] Alias không được để trống.";
            }
            if($_unitprice===false || (float)$_unitprice == 0){
                $messages[]    =   "[Shound be non-empty] Unit Price không được để trống.";
            }
            if($_description===false || $_description == ""){
                $messages[]    =   "[Shound be non-empty] Description không được để trống.";
            }
            if($_products===false || !is_array($_products) || count($_products)==0){
                $messages[]    =   "[Shound be non-empty] Products không được để trống.";
            }
            if(count($messages)>0){
                $result   =   -1;
                $message    =   implode("<br/>", $messages);
                goto result;
            }
            $params=array(
                "PackageName"   =>  $_name,
                "UnitPrice"     =>  $_unitprice,
                "Description"   =>  $_description,
                "Detail"        => json_encode($_products),
                "Alias"         =>  convertUrl($_alias),
            );
            //var_dump($params);return;
            if($_id==false){
                //var_dump($Params);return;
                $rs=$this->package_model->insert($params);
            }else{
                $rs=$this->package_model->update($_id,$params);
            }
            if($rs===false){
                $result   =   -888;
                $message    =   "[Fail] Please check your data input and try again.<br/><br/>
                    Find out more about an <span class='csp'><tt onclick='_whyerror()'>Error Message</tt></span>
                    ";
            }else{
                $alog=array(
                    "_table"=>"Product",
                    "_row"=>null,
                    "_commandtype"=>$_id==false?"insert":"update",
                    "_log"=>print_r(array(
                        "user" =>$_SESSION["ADP"]["USER"]["Name"],
                        "ip"=>  getIP(),
                        "command"=>$_id==false?"insert":"update",
                        "id"    =>$_id
                    ),true)
                );
                @$this->backend_model->tolog($alog);
                $result   =   1;
                $message    =   "[Success]. Thành công.";
            }
            result:
            echo json_encode(array("result"=>$result,"message"=>$message));
        }
        public function delete($token=""){
            if(TOKEN!=$token){
                echo json_encode(array("result"=>-1,"message"=>"Token is invalid!"));return;
            }
            
            $_id=$this->input->post("_id");
            if(!checkAuthority("product",false)){
                $code=-1;
                $msg="[Access Denied] Bạn không có quyền thực hiện thao tác này.<br/> Mọi thay đổi dữ liệu đều không được công nhận.";
            }elseif($_id!==false){
                $params=array(
                    "Delete"=>date("Y-m-d H:i:s")
                );
                $rs=$this->backend_model->update($_id,$params);
                if($rs!==false and (int)$rs>0){
                    $code=1;
                    $msg="[Success] Thành công. Dữ liệu đã được xóa ".($rs>1?"($rs)":"").".";
                }else{
                    $code=-1;
                    $msg    =   "[Fail] Please check your data input and try again.<br/><br/>
                    Find out more about an <span class='csp'><tt onclick='_whyerror()'>Error Message</tt></span>
                    ";
                }
            }else{  
                $code=-1;
                $msg="[Empty data] Lỗi, dữ liệu trống.";
            }
            echo json_encode(array("result"=>$code,"message"=>$msg));
        }
        public function restore($token=""){
            if(TOKEN!=$token){
                echo json_encode(array("result"=>-1,"message"=>"Token is invalid!"));return;
            }
            
            $_id=$this->input->post("_id");
            if(!checkAuthority("product",false)){
                $code=-1;
                $msg="[Access Denied] Bạn không có quyền thực hiện thao tác này.<br/> Mọi thay đổi dữ liệu đều không được công nhận.";
            }elseif($_id!==false){
                $params=array(
                    "Delete"=>null
                );
                $rs=$this->backend_model->update($_id,$params);
                if($rs!==false and (int)$rs>0){
                    $code=1;
                    $msg="[Success] Thành công. Dữ liệu đã được khôi phục ".($rs>1?"($rs)":"").".";
                }else{
                    $code=-1;
                    $msg    =   "[Fail] Please check your data input and try again.<br/><br/>
                    Find out more about an <span class='csp'><tt onclick='_whyerror()'>Error Message</tt></span>
                    ";
                }
            }else{  
                $code=-1;
                $msg="[Empty data] Lỗi, dữ liệu trống.";
            }
            echo json_encode(array("result"=>$code,"message"=>$msg));
        }
        public function changestatus($token=""){
            if(TOKEN!=$token){
                $code=-1;
                $msg="Token is invalid!";
                goto _return;
            }
            
            $_id=$this->input->post("_id");
            $_status=$this->input->post("_status");
            if(!checkAuthority("product",false)){
                $code=-1;
                $msg="[Access Denied] Bạn không có quyền thực hiện thao tác này.<br/> Mọi thay đổi dữ liệu đều không được công nhận.";
                goto _return;
            }elseif($_id!==false){
                if($_status=="true")$_status="Public";
                if($_status=="false")$_status="Private";
                $params=array(
                    "Update"=>date("Y-m-d H:i:s"),
                    "Status"=>$_status
                );
                $rs=$this->backend_model->update($_id,$params);
                if($rs!==false and (int)$rs>0){
                    $code=1;
                    $msg="[Success] Thành công. Trạng thái dữ liệu đã được cập nhật ".($rs>1?"($rs)":"").".";
                }else{
                    $code=-1;
                    $msg="[Fail] Thất bại. Vui lòng kiểm tra dữ liệu và thử lại.";
                }
            }else{  
                $code=-1;
                $msg="[Error] Lỗi, dữ liệu trống.";
            }
            _return:
            echo json_encode(array("result"=>$code,"message"=>$msg));
        }
        function binding(){
            $data_rows=array();
            $result=$this->package_model->binding();
            for ($i=0;$i<count($result['rows']);$i++) {
                $result['rows'][$i]->Status = ($result['rows'][$i]->Status=="true" || $result['rows'][$i]->Status=="Public")?true:false;
            }
            $data[] = array(
                'TotalRows' => $result['total_rows'],
                'Rows' => $result['rows']
            );
            echo json_encode($data);
        }
}
?>
